Буква.отд
Главная     ◄Глагол     ◄Азбука     ◄Задачи на Глаголе     Примеры приложений ►   Среда разработки ►   Отладка программ ►   Отличия от Оберона ►   Отличия от Паскаля ►   Ассемблер ARM ►   Глагол для ARM ►   ? и Ответы
 
 glagol.png Программируем по-русски
 

Основная задача Глагола — дать человеку возможность воплощать свои мысли на языке, близком к его родному языку.

Издатель Глагола
 

 
(*~\Глагол\Отделы\Иное~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
(**)                        ОТДЕЛ Буква;
(*============================================================================*)
(* НАЗНАЧЕНИЕ: распознавание и преобразование букв                            *) 
(*============================================================================*)
ПОСТ
                     (* номера допустимых азбук *)
  русскаяАзбука       = 0;
  украинскаяАзбука    = 1;
  белорусскаяАзбука   = 2;
  дореформеннаяАзбука = 3;
  латинскаяАзбука     = 4;
    (* известные буквы - буквы из азбучных цепочек в допустимых азбуках *)
(* 0 *) русскиеЗаглавные       = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ";
        русскиеСтрочные        = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";
(* 1 *) украинскиеЗаглавные    = "АБВГҐДЕЄЖЗИІЇЙКЛМНОПРСТУФХЦЧШЩЬЮЯʼ";   
        украинскиеСтрочные     = "абвгґдеєжзиіїйклмнопрстуфхцчшщьюя’";   
(* 2 *) белорусскиеЗаглавные   = "АБВГДЕЁЖЗІЙКЛМНОПРСТУЎФХЦЧШЫЬЭЮЯʼ";  
        белорусскиеСтрочные    = "абвгдеёжзійклмнопрстуўфхцчшыьэюя’";  
(* 3 *) дореформенныеЗаглавные = "АБВГДЕЁЖЗИІЙКЛМНОПРСТУФХЦЧШЩЪЫЬѢЭЮЯ#0472#0474";
        дореформенныеСтрочные  = "абвгдеёжзиійклмнопрстуфхцчшщъыьѣэюя#0473#0475";
(* 4 *) латинскиеЗаглавные     = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";    
        латинскиеСтрочные      = "abcdefghijklmnopqrstuvwxyz";    
    (* сюда ещё бы добавить греческую азбуку! *)
ВИД
    (* вид "ПризнакиИзвестнойБуквы" - набор параметров принадлежности
                переменной вида ЗНАК к одной из допустимых азбучных цепочек *)
  Вид = НАБОР
    азбуки:МНОЖ;(* множество допустимых азбук с этой буквой: {0}/{1}/{2}/{3}/{4} *)
    заглавная,строчная:ЗНАК;            (* пара букв из азбучных цепочек *)
  КОН;

 (* глобальные переменные для задач отдела Буква, не видные в других отделах *)
ПЕР
  рПризнакиИзвестнойБуквы:РЯД 128 ИЗ Вид;
  всегоБукв:ЦЕЛ;                 (* сколько занято букв в ряду <рПризнакиИзвестнойБуквы> *)
  рНомераБукв:РЯД 10000H ИЗЯЧЦЕЛ;(* ряд из номеров букв в ряду <рПризнакиИзвестнойБуквы> *)

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Азбуки(знак:ЗНАК):МНОЖ;
(*  Принадлежность <знак> к множеству допустимых азбук: {0},{1},{2},{3},{4} *)
УКАЗ
  ВОЗВРАТ рПризнакиИзвестнойБуквы[рНомераБукв[ВЦЕЛ(знак)]].азбуки
КОН Азбуки;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Известная-(этойБуквы:ЗНАК):КЛЮЧ;
(* ВКЛ, если <этойБуквы> является известной буквой *)
УКАЗ 
  ВОЗВРАТ Азбуки(этойБуквы) # {}       (* не пусто *)
КОН Известная;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Русская-(этойБуквы:ЗНАК):КЛЮЧ; 
(* ВКЛ, если <этойБуквы> является русской буквой *) 
УКАЗ 
  ВОЗВРАТ русскаяАзбука В Азбуки(этойБуквы) 
КОН Русская; 

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Украинская-(этойБуквы:ЗНАК):КЛЮЧ; 
(* ВКЛ, если <этойБуквы> является украинской буквой *) 
УКАЗ 
  ВОЗВРАТ украинскаяАзбука В Азбуки(этойБуквы) 
КОН Украинская; 

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Белорусская-(этойБуквы:ЗНАК):КЛЮЧ; 
(* ВКЛ, если <этойБуквы> является белорусской буквой *) 
УКАЗ 
  ВОЗВРАТ белорусскаяАзбука В Азбуки(этойБуквы)
КОН Белорусская; 

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Дореформенная-(этойБуквы:ЗНАК):КЛЮЧ; 
(* ВКЛ, если <этойБуквы> является русской дореформенной буквой *) 
УКАЗ 
  ВОЗВРАТ дореформеннаяАзбука В Азбуки(этойБуквы)
КОН Дореформенная;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Латинская-(этойБуквы:ЗНАК):КЛЮЧ;
(* ВКЛ, если <этойБуквы> является латинской буквой *)
УКАЗ 
  ВОЗВРАТ латинскаяАзбука В Азбуки(этойБуквы)
КОН Латинская;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Заглавная-(буква:ЗНАК):КЛЮЧ;
(* ВКЛ, если <буква> является заглавной буквой *)
УКАЗ
  ВОЗВРАТ буква = рПризнакиИзвестнойБуквы[рНомераБукв[ВЦЕЛ(буква)]].заглавная 
КОН Заглавная;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА ВЗаглавную-(буква:ЗНАК):ЗНАК;
(* Переводит <буква> в заглавную букву *)
ПЕР 
  номер:ЦЕЛ;      (* номер в ряду <рПризнакиИзвестнойБуквы> (из 128 наборов) *)
УКАЗ
  номер:=рНомераБукв[ВЦЕЛ(буква)];
  ЕСЛИ  номер = 0 ТО
    ВОЗВРАТ буква 
  КОН;
  ВОЗВРАТ рПризнакиИзвестнойБуквы[номер].заглавная 
КОН ВЗаглавную;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА ВСтрочную-(буква:ЗНАК):ЗНАК;
(* Переводит <буква> в строчную букву *)
ПЕР 
  номер:ЦЕЛ;
УКАЗ
  номер:=рНомераБукв[ВЦЕЛ(буква)];
  ЕСЛИ  номер = 0 ТО
    ВОЗВРАТ буква
  КОН;
  ВОЗВРАТ рПризнакиИзвестнойБуквы[номер].строчная
КОН ВСтрочную;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА ДобавитьБукву(заглавнаяБуква,строчнаяБуква:ЗНАК; номерАзбуки:ЦЕЛ);
ПЕР 
  номер:ЦЕЛ;      (* номер в ряду <рПризнакиИзвестнойБуквы> (из 128 наборов) *)
УКАЗ
  номер:=1;
  ПОКА  номер < всегоБукв ВЫП 
    ЕСЛИ  рПризнакиИзвестнойБуквы[номер].заглавная = заглавнаяБуква
    ТО                               (* такая буква уже есть в других азбуках *)
      рПризнакиИзвестнойБуквы[номер].азбуки:=
      рПризнакиИзвестнойБуквы[номер].азбуки+{номерАзбуки};
      ВОЗВРАТ 
    КОН;
    УВЕЛИЧИТЬ(номер)
  КОН;
                              (* новая буква в ряду <рПризнакиИзвестнойБуквы> *)
  рПризнакиИзвестнойБуквы[номер].азбуки:={номерАзбуки};
  рПризнакиИзвестнойБуквы[номер].заглавная:=заглавнаяБуква;
  рПризнакиИзвестнойБуквы[номер].строчная:=строчнаяБуква;

  рНомераБукв[ВЦЕЛ(заглавнаяБуква)]:=УЗК(УЗК(номер));
  рНомераБукв[ВЦЕЛ(строчнаяБуква)]:=УЗК(УЗК(номер));

  УВЕЛИЧИТЬ(всегоБукв)

КОН ДобавитьБукву;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА ДобавитьАзбуку(рЗаглавные-,рСтрочные-:ЦЕПЬ; номерАзбуки:ЦЕЛ);
(* Добавляет в ряд <рПризнакиИзвестнойБуквы> из <рЗаглавные> и <рСтрочные>
                     все знаки из азбучной цепочки и <номерАзбуки>          *)
(* Добавляет в ряд <рНомераБукв> новый <номер>=<всегоБукв> *)
ПЕР 
  место:ЦЕЛ;   (* <место> в азбучной цепочке <рЗаглавные> и <рСтрочные>    *)
УКАЗ
  ОТ место:=0 ДО РАЗМЕР(рЗаглавные)-2 ВЫП 
    ДобавитьБукву(рЗаглавные[место],рСтрочные[место],номерАзбуки)
  КОН
КОН ДобавитьАзбуку;

(*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
ЗАДАЧА Подготовить;            (* Подготовить ряд <рПризнакиИзвестнойБуквы> *)
УКАЗ
           (* 0-я буква - пустышка *)
  всегоБукв:=1;
  ДобавитьАзбуку(русскиеЗаглавные,      русскиеСтрочные,      русскаяАзбука);
  ДобавитьАзбуку(украинскиеЗаглавные,   украинскиеСтрочные,   украинскаяАзбука);
  ДобавитьАзбуку(белорусскиеЗаглавные,  белорусскиеСтрочные,  белорусскаяАзбука);
  ДобавитьАзбуку(дореформенныеЗаглавные,дореформенныеСтрочные,дореформеннаяАзбука);
  ДобавитьАзбуку(латинскиеЗаглавные,    латинскиеСтрочные,    латинскаяАзбука);
КОН Подготовить;

(*-++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-*)
УКАЗ
  Подготовить
КОН Буква.


 
 


Вопросы, замечания и предложения высылайте на atimopheyev@yahoo.com

 
Главная     ◄Глагол     ◄Азбука     ◄Задачи на Глаголе     Примеры приложений ►   Среда разработки ►   Отладка программ ►   Отличия от Оберона ►   Отличия от Паскаля ►   Ассемблер ARM ►   Глагол для ARM ►   ? и Ответы